package com.itc.system.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.itc.common.core.domain.R;
import com.itc.system.api.domain.SysDept;
import com.itc.system.api.domain.SysUser;
import com.itc.system.api.domain.dto.SysDeptCheckDto;
import com.itc.system.domain.dto.SysDeptMenuDto;
import com.itc.system.domain.vo.TreeSelectDept;

import java.util.List;

/**
* @author wangjinxia
* @description 针对表【sys_dept(部门表)】的数据库操作Service
* @createDate 2024-05-10 15:53:30
*/
public interface SysDeptService extends IService<SysDept> {
    /**
     * 添加部门
     * @param sysDept
     * @return
     */
    public R addDept(SysDept sysDept);

    /**
     * 根据id删除部门
     * @param deptId
     * @return
     */
    public R removeDept(Long deptId);

    /**
     * 修改部门信息
     * @param sysDept
     * @return
     */
    public R updateDept(SysDept sysDept);

    /**
     * 查询部门树结构信息
     *
     * @param dept 部门信息
     * @return 部门树信息集合
     */
    public List<SysDept> selectDeptTreeList(SysDept dept);

    /**
     * 构建前端所需要树结构
     *
     * @param depts 部门列表
     * @return 树结构列表
     */
    public List<SysDept> buildDeptTree(List<SysDept> depts);

    /**
     * 构建前端所需要下拉树结构
     *
     * @param depts 部门列表
     * @return 下拉树结构列表
     */
    public List<TreeSelectDept> buildDeptTreeSelect(List<SysDept> depts);

    /**
     * 查询部门树结构信息所有的信息
     * @param depts
     * @return
     */
    public List<SysDept> buildDeptTreeAll(List<SysDept> depts);

    /**
     * 查询部门树只显示部门名称
     * @param dept
     * @return
     */
    public List<TreeSelectDept> selectDeptTree(SysDept dept);

    /**
     * 获取详情
     * @param deptId
     * @return
     */
    R getDetail(Long deptId);

    /**
     *
     * @param dto
     * @return
     */
    R menuBind(SysDeptMenuDto dto);

    List<SysDept> getSysDeptById(String deptId );

    SysUser getUserById(Long userId);

    SysDept getDeptById(Long deptId);

    List<SysDept> getDeptChildByUserIds(String deptChildId);

    Boolean biDeptCheck(SysDeptCheckDto dto);

    List<SysDept> getSeatListByDeptId(SysDeptCheckDto sysDept);

    List<Long> getUserDeptSeats(SysUser sysUser);
}
